// 此源代码的使用受BSD样式
// 许可证的约束，该许可证可以在许可证文件中找到。

// 包goarch包含goarch特定的常数。
package goarch

// 下一行让'go generate'编写zgoarch*。每个arch信息包含
// go文件，包括每个
// GOARCH的名为$GOARCH的常量。当前系统的常数为1，否则为0；将
// 乘以它们可用于定义特定于目标的常数。
// go:generate go run gengoarch。go 

type ArchFamilyType int

const (
	AMD64 ArchFamilyType = iota
	ARM
	ARM64
	I386
	MIPS
	MIPS64
	PPC64
	RISCV64
	S390X
	WASM
)

// PtrSize是指针的大小（以字节为单位），不安全。Sizeof（uintptr（0））但作为一个理想常数。
// 它也是机器的本机字大小（即32位系统为4，64位系统为8）。
const PtrSize = 4 << (^uintptr(0) >> 63)

// ArchFamily是建筑家族（AMD64，ARM，…）
const ArchFamily ArchFamilyType = _ArchFamily

// BigEndian报告架构是否为BigEndian。
const BigEndian = IsArmbe|IsArm64be|IsMips|IsMips64|IsPpc|IsPpc64|IsS390|IsS390x|IsSparc|IsSparc64 == 1

// DefaultPhysPageSize是默认的物理页面大小。
const DefaultPhysPageSize = _DefaultPhysPageSize

// PCQuantum是程序计数器的最小单位（x86上为1，大多数其他系统上为4）。
// 不同的PC表记录PC增量除以PCQuantum。
const PCQuantum = _PCQuantum

// Int64Align是64位整数（32位系统上为4，64位系统上为8）所需的对齐方式。
const Int64Align = PtrSize

// MinFrameSize是框架底部系统保留字的大小
// 位于架构堆栈指针的正上方。
// 在x86上为零，在大多数非x86（基于LR的）系统上为PtrSize。
// 在PowerPC上，它更大，可以覆盖三个保留字：
// 编译器字、链接编辑器字和TOC保存字。
const MinFrameSize = _MinFrameSize

// StackAlign是SP寄存器所需的对齐方式。
// 堆栈必须至少与字对齐，但有些体系结构需要更多。
const StackAlign = _StackAlign
